package com.healthcloud.service;

import java.util.List;
import java.util.Map;

import com.healthcloud.entity.Doctor;
import com.healthcloud.entity.SysUserEntity;
import com.healthcloud.utils.PageParam;
import com.healthcloud.vo.DoctorHospitalVo;

/**
 * Created by houxianghua on 2015/7/27.
 */
public interface DoctorService {
    Doctor get(Long id);

    List<Doctor> findByEntityAll(Doctor entity);

    List<Doctor> search(Doctor entity, PageParam pageParam);

    int count(Doctor entity);

    /**
     * 注册医生完整信息
     * @param user 用户基本信息
     * @param doctor 医生基本信息
     * @param hospId 医院id
     * @param officeCodes 科室代码(医院与科室关联表ID)集合
     * */
    void register(SysUserEntity user, Doctor doctor, Long hospId, Long[] officeCodes);

    /**
     * 注册医生完整信息
     * @param user 用户基本信息
     * @param doctor 医生基本信息
     * @param map key:医院id value:科室代码(医院与科室关联表ID)集合
     * */
    void register(SysUserEntity user, Doctor doctor, Map<Long,List<Long>> map);

    void save(Doctor doctor);

    int update(Doctor entity);

    /**
     * 修改医生完整信息
     * @param user 用户基本信息
     * @param doctor 医生基本信息
     * @param map key:医院id value:科室代码(医院与科室关联表ID)集合
     * */
    void update(SysUserEntity user, Doctor doctor, Map<Long,List<Long>> map);

    int delete(Long id);

    int deletes(Long[] ids);

    /**
     * 根据用户id获取医生基本信息
     * @param userId 用户id
     * */
    Doctor getDoctorByUserId(Long userId);

    /**
     * 根据医院id获取医生完整信息列表
     * @param hospId 医院id
     * @return 医生完整信息列表（用户基本信息，医生基本信息，医院信息，科室信息）
     * */
    List<DoctorHospitalVo> getDoctorVosByHospId(Long hospId);

    /**
     * 根据医生id获取医生完整信息列表
     *
     * @param drId 医生id
     * @return 医生完整信息列表（用户基本信息，医生基本信息，医院信息，科室信息）
     */
    List<DoctorHospitalVo> getDoctorVosByDrId(Long drId);

    /**
     * 根据用户id获取医生完整信息列表
     *
     * @param userId 用户id
     * @return 医生完整信息列表（用户基本信息，医生基本信息，医院信息，科室信息）
     */
    List<DoctorHospitalVo> getDoctorVosByUserId(Long userId);
}
